package com.zgx.plus.generator.po;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "gen_table_column")
public class GenTableColumn extends Model<GenTableColumn> {
    /**
     * 编号
     */
    @TableId(value = "column_id", type = IdType.AUTO)
    private Long columnId;

    /**
     * 归属表编号
     */
    @TableField(value = "table_id")
    private Long tableId;

    /**
     * 列名称
     */
    @TableField(value = "column_name")
    private String columnName;

    /**
     * 列描述
     */
    @TableField(value = "column_comment")
    private String columnComment;

    /**
     * 列类型
     */
    @TableField(value = "column_type")
    private String columnType;

    /**
     * JAVA类型
     */
    @TableField(value = "java_type")
    private String javaType;

    /**
     * JAVA字段名
     */
    @TableField(value = "java_field")
    private String javaField;

    /**
     * 是否主键（1是）
     */
    @TableField(value = "is_pk")
    private String isPk;

    /**
     * 是否自增（1是）
     */
    @TableField(value = "is_increment")
    private String isIncrement;

    /**
     * 是否必填（1是）
     */
    @TableField(value = "is_required")
    private String isRequired;

    /**
     * 是否为插入字段（1是）
     */
    @TableField(value = "is_insert")
    private String isInsert;

    /**
     * 是否编辑字段（1是）
     */
    @TableField(value = "is_edit")
    private String isEdit;

    /**
     * 是否列表字段（1是）
     */
    @TableField(value = "is_list")
    private String isList;

    /**
     * 是否查询字段（1是）
     */
    @TableField(value = "is_query")
    private String isQuery;

    /**
     * 查询方式（等于、不等于、大于、小于、范围）
     */
    @TableField(value = "query_type")
    private String queryType;

    /**
     * 显示类型（文本框、文本域、下拉框、复选框、单选框、日期控件）
     */
    @TableField(value = "html_type")
    private String htmlType;

    /**
     * 字典类型
     */
    @TableField(value = "dict_type")
    private String dictType;

    /**
     * 排序
     */
    @TableField(value = "sort")
    private Integer sort;

    /**
     * 创建者
     */
    @TableField(value = "create_by")
    private String createBy;

    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private Date createTime;

    /**
     * 更新者
     */
    @TableField(value = "update_by")
    private String updateBy;

    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    private Date updateTime;

    public boolean isPk() {
        return StrUtil.isNotBlank(this.isPk) && StrUtil.equals(this.isPk, "1");
    }

    public boolean isInsert() {
        return StrUtil.isNotBlank(this.isInsert) && StrUtil.equals(this.isInsert, "1");
    }
    public boolean isEdit() {
        return StrUtil.isNotBlank(this.isEdit) && StrUtil.equals(this.isEdit, "1");
    }

    public boolean isUsableColumn() {
        // isSuperColumn()中的名单用于避免生成多余Domain属性，若某些属性在生成页面时需要用到不能忽略，则放在此处白名单
        return StrUtil.equalsAnyIgnoreCase(this.javaField, "parentId", "orderNum", "remark");
    }

    public boolean isSuperColumn() {
        return StrUtil.equalsAnyIgnoreCase(javaField,
                // BaseEntity
                "createBy", "createTime", "updateBy", "updateTime", "remark",
                // TreeEntity
                "parentName", "parentId", "orderNum", "ancestors");

    }

    public boolean isList() {
        return StrUtil.isNotBlank(this.isList) && StrUtil.equals(this.isList, "1");
    }
}
